#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
struct ST
{
    int st[10];
	int num; 
};
struct ST fun (struct ST s[],int n,int t)
{
    int i;
    while(n)
    {
        int flag=1;
        for (i=1;i<n;i++)
        {
           if (s[t].st[i-1]<s[t].st[i])
           {
               int temp=s[t].st[i];
               s[t].st[i]=s[t].st[i-1];
               s[t].st[i-1]=temp;
               flag=0;
           }
        }
        if (flag)break;
        --n;
    }
    return s[t];
}
int main()
{
	int n;
	while(scanf ("%d",&n)!=EOF)
  {
  	if (n==0)break;
    int a[110],b[110],max=0,c=1,k=0,sum=0;
    memset(a,0,sizeof a);
    memset(b,0,sizeof b);
	struct ST data[100]={0};
	int i;
	for (i=0;i<n;i++)
    {
        scanf ("%d",&a[i]);
        if(a[i]>max)max=a[i];
    }
	for (i=0;i<n;i++)
	{   
	   if(b[a[i]]==0)
	   {
	   	scanf ("%d",&data[a[i]].st[0]);
	   	data[a[i]].num=1;
	   	b[a[i]]=1;
		}
		else 
		{
			scanf ("%d",&data[a[i]].st[b[a[i]]]);
				data[a[i]].num=b[a[i]]+1;
            b[a[i]]+=1;
		} 
	}
      memset(b,0,sizeof b);
   for(i=1;i<=max;i++)
   {
       if (data[i].num==1)
           b[c++]=data[i].st[0];
       else if (data[i].num==0)
           b[c++]=0;
       else 
       {   int t=1,j;
           fun (data,data[i].num,i);
           b[c++]=data[i].st[0];
           while(1)
           {  
               if (t>data[i].num)break;
               int flag=1;
               for (j=1;j<=i;j++)
               {
                   if (data[i].st[t]>b[j])
                   {
                       int temp=b[j];
                       b[j]=data[i].st[t];
                       sum+=temp;
                       flag=0;
                       break;
                   }
               }
               if (flag)sum+=data[i].st[t];
               t++;
           }
       }
   }
    printf ("%d\n",sum);
  }
	return 0;
}
